package biblio;

import java.util.Observable;
import java.util.Observer;

/**
 * Classe de gestion d'ouvrage.
 * @author IUT, refactoré  par E. Ceret & modifié par A. Chalumeau
 * @version 2.0
 */
public class VueOuvrage implements Observer {
	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private Ouvrage _ouvrage;

	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************

	/**
	 * Constructeur.
	 * @param ouvrage ouvrage � afficher.
	 */
	public VueOuvrage(Ouvrage ouvrage) {
		// Liaison avec l'objet Ouvrage
		this.lierOuvrage(ouvrage);

		// pour MVC : la vue s'ajoute comme observateur de l'objet ouvrage
		this.getOuvrage().addObserver(this);
	} // Fin Constructeur

	// ************************************************************************************************************
	// M�thodes priv�es
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Accesseurs
	
	/**
	 * @return ouvrage associ� � cette vue
	 */
	private Ouvrage getOuvrage() {
		return _ouvrage;
	}
	
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs
	
	/**
	 * @param ouvrage ouvrage � lier cette vue
	 */
	private void lierOuvrage(Ouvrage ouvrage) {
		_ouvrage = ouvrage;
	} // Fin lierOuvrage

	// ************************************************************************************************************
	// M�thodes publiques
	// ************************************************************************************************************

	// ------------------------------------------------------------------------------------------------------------
	// Traitements

	/**
	 * Affiche toutes les informations de l'ouvrage associ� � cette vue
	 */
	public void afficherTout() {
		EntreesSorties.afficherMessage("");
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
		EntreesSorties.afficherMessage("                 -                OUVRAGE             - ");
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
		EntreesSorties.afficherMessage("                 - ISBN  = " + this.getOuvrage().getIsbn());
		EntreesSorties.afficherMessage("                 - Titre  = " + this.getOuvrage().getTitre());
		EntreesSorties.afficherMessage("                 - Nb d'auteurs  = " + this.getOuvrage().getNbAuteurs());
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
		EntreesSorties.afficherMessage("                 - Auteurs  :                 ");
				for (Auteur auteur : this.getOuvrage().getAuteurs()) {
								EntreesSorties.afficherMessage("                    * " + auteur.getnomAuteur() + " " + auteur.getprenomAuteur());
		}
				
		EntreesSorties.afficherMessage("                 -------------------------------------- ");		
		EntreesSorties.afficherMessage("                 - Editeur = " + this.getOuvrage().getEditeur());
		EntreesSorties.afficherMessage("                 - Date edition : "	+ EntreesSorties.ecrireDate(this.getOuvrage().getDateEdition()));
		EntreesSorties.afficherMessage("                 - Nb d'exemplaires  = " + this.getOuvrage().getNbExemplaires());
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
		EntreesSorties.afficherMessage("                 - Exemplaires :                 ");
		for (Exemplaire exemplaire : this.getOuvrage().getExemplaires()) {
			EntreesSorties.afficherMessage("                    * " + exemplaire.getNumero() + " du " + 
					EntreesSorties.ecrireDate(exemplaire.getDateReception()) + " : " + exemplaire.libStatut());
		}
		EntreesSorties.afficherMessage("                 -------------------------------------- ");
	} // Fin afficherTout

	/* 
	 * M�thode appel�e lors de la mise � jour d'un objet observ�
	 * Lorsque l'objet observ� (un ouvrage) est modifi�, la vue r�affiche l'ouvrage
	 * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
	 */
	public void update(Observable observable, Object objet) {
		// maj de la vue
		this.afficherTout();
	} // Fin upDate

	/**
	 * Elimine la vue de la liste des observateurs de l'ouvrage
	 */
	public void elimineObserveur() {
		this.getOuvrage().deleteObserver(this);
	} // Fin elimineObserveur

} // Fin Classe VueOuvrage
